package com.ruoyi.app.service;

import com.ruoyi.app.domain.AppImGroup;
import com.ruoyi.app.domain.bo.AppImGroupBo;
import com.ruoyi.app.domain.vo.AppImGroupVo;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.system.domain.UpAppImGroupReq;

import java.util.Collection;
import java.util.List;

/**
 * 群组Service接口
 *
 * @author ruoyi
 * @date 2025-11-11
 */
public interface IAppImGroupService {

    /**
     * 查询群组
     */
    AppImGroupVo queryById(String id);

    /**
     * 查询群组列表
     */
    TableDataInfo<AppImGroupVo> queryPageList(AppImGroupBo bo, PageQuery pageQuery);

    /**
     * 查询群组列表
     */
    List<AppImGroupVo> queryList(AppImGroupBo bo);

    /**
     * 新增群组
     */
    Boolean insertByBo(AppImGroupBo bo);

    /**
     * 修改群组
     */
    Boolean updateByBo(AppImGroupBo bo);

    /**
     * 校验并批量删除群组信息
     */
    Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);


    /**
     * 搜索群聊
     * @return
     */
    List<AppImGroup> searchGroup(String keyWord);

    /**
     * 设置群组搜索标识
     * @param groupId
     * @param flag
     * @return
     */
    String setSearchGroupFlag(String groupId, Integer flag);

    /**
     * 查询群组信息
     * @param groupId
     * @return
     */
    Object selGroupById(String groupId);


    /**
     * 修改群组信息
     * @param req
     * @return
     */
    Object updateGroupData(UpAppImGroupReq req);

    /**
     * 获取群组列表
     * @param userId
     * @param targetId
     * @return
     */
    Object selTongGroup(Long userId, Long targetId);

    /**
     * 添加群组成员
     * @param groupId
     * @param userIdList
     * @return
     */
    Object addGroupMember(String groupId, List<Long> userIdList);

    /**
     * 添加群管理员
     *
     */
    Object addGroupManager(String groupId, List<Long> userIdList);

    /**
     * 获取群管理员信息
     * @param groupId
     * @return
     */
    Object getGroupManagerData(String groupId);

    /**
     * 移除群组成员
     * @param groupId
     * @param userIdList
     * @return
     */
    Object removeGroupMember(String groupId, List<Long> userIdList);

    /**
     * 删除群组
     * @param groupId
     * @return
     */
    Object delGroup(String groupId);

    /**
     * 禁言群成员
     * @param groupId
     * @param userIdList
     * @return
     */
    Object silenceGroupMember(String groupId, List<Long> userIdList);

    /**
     * 解除群成员禁言
     * @param groupId
     * @param userIdList
     * @return
     */
    Object removeSilenceGroupMember(String groupId, List<Long> userIdList);

    /**
     * 群成员禁言
     * @param groupId
     * @return
     */
    Object silenceAllGroupMember(String groupId);

    /**
     * 忽略群申请
     * @param ids
     * @return
     */
    Object ignoreGroupApply(List<Long> ids);

    /**
     * 取消群管理员
     * @param groupId
     * @param userIdList
     * @return
     */
    Object cancelGroupManager(String groupId, List<Long> userIdList);

    /**
     * 获取群禁言列表
     * @param groupId
     * @return
     */
    Object silenceGroupList(String groupId);

    /**
     * 取消群成员全部禁言
     * @param groupId
     * @return
     */
    Object cancelSilenceAllGroupMember(String groupId);
}
